package cn.com.bluemoon.daps.sync.service;

import cn.com.bluemoon.daps.common.domain.UserInfoHolder;
import cn.com.bluemoon.daps.common.enums.SyncToEnv;
import cn.com.bluemoon.daps.sync.base.CompareResult;
import cn.com.bluemoon.daps.sync.base.SqlCompareResult;
import cn.com.bluemoon.daps.sync.vo.model2dev.SyncTableInfoOut;
import cn.com.bluemoon.daps.sync.vo.model2dev.SyncTablePageVo;
import cn.com.bluemoon.daps.sync.vo.model2dev.SyncTableTaskOut;
import cn.com.bluemoon.daps.sync.vo.model2dev.SyncTableTaskPageVo;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

public interface DapModel2DevSyncService {

    /**
     * 模型表数据同步到开发库、测试库前的对比结果SQL
     *
     * @param modelId   模型id
     * @param syncToEnv 同步到的环境
     * @param tableIds  所选的同步表
     * @return 对比结果
     */
    List<CompareResult<SqlCompareResult>> syncPreCompareResult(String modelId, SyncToEnv syncToEnv, List<String> tableIds);

    /**
     * 模型表数据同步到开发库、测试库
     * 对比结果
     *
     * @param modelId   模型id
     * @param syncToEnv 同步到的环境
     * @param tableIds  所选的同步表
     * @param userInfo  操作人
     * @param async     是否异步执行 true开启异步执行，返回结果都是true，false会根据实际执行情况返回结果
     * @return 同步结果
     */
    boolean sync(String modelId, SyncToEnv syncToEnv, List<String> tableIds, UserInfoHolder.UserInfo userInfo, boolean async);

    /**
     * 模型表数据同步到开发库、测试库
     * 对比结果
     * 异步执行
     *
     * @param modelId   模型id
     * @param syncToEnv 同步到的环境
     * @param tableIds  所选的同步表
     * @param userInfo  操作人
     * @return 同步结果 都是true
     */
    boolean async(String modelId, SyncToEnv syncToEnv, List<String> tableIds, UserInfoHolder.UserInfo userInfo);

    /**
     * 获取开发同步列表分页数据
     *
     * @param searchVo 查询条件
     * @return page
     */
    IPage<SyncTableInfoOut> querySyncList(SyncTablePageVo searchVo);

    /**
     * 查看表同步日志
     *
     * @param searchVo#getTableId 表id 对应开发同步行id
     * @param searchVo#getType    查看表同步类型，1 查看开发库日志 2查看测试库日志, 默认为1
     * @return page
     */
    IPage<SyncTableTaskOut> viewSyncTasks(SyncTableTaskPageVo searchVo);

    /**
     * 根据表任务id 表${dap_sync_dev_env_task.id}
     *
     * @param syncTaskId id
     * @return log
     */
    String viewSyncTaskLog(String syncTaskId);
}
